use std::io;

use chrono::Local;
use tracing::Level;
use tracing_subscriber::EnvFilter;
use tracing_subscriber::fmt::format::Writer;
use tracing_subscriber::fmt::time::FormatTime;

// 日志的时间格式
struct LocalTime;

impl FormatTime for LocalTime {
    fn format_time(&self, w: &mut Writer<'_>) -> std::fmt::Result {
        // write!(w, "{}", Local::now().format("%FT%T%.3f"))
        write!(w, "{}", Local::now().format("%Y-%m-%d %H:%M:%S"))
    }
}

// fn datetime_string_now() -> String {
//     let datetime: DateTime<Local> = Local::now();
//     let date = datetime.date_naive();
//     let time = datetime.time();
//     format!("{date} {time}")
// }

pub fn init_logger() {
    // 日志输出格式
    let format = tracing_subscriber::fmt::format()
        // 包括日志级别
        .with_level(true)
        // 包括日志位置
        .with_target(true)
        // 包括日志时间
        .with_timer(LocalTime)
        // 显示行号
        .with_line_number(true);

    tracing_subscriber::fmt()
        // crate 日志过滤
        .with_env_filter(EnvFilter::from_default_env())
        .with_writer(io::stdout)
        .event_format(format)
        .init();
}
